//
//  IsPalindrome.swift
//  LeetCodeDemo
//
//  Created by OS on 2022/6/15.
//

/*
 回文数
 */

import Foundation

class IsPalindrome {
    
    /*
     方法一 翻转低位和高位进行对比
     
     注意: 边界条件需要处理 x % 10 == 0 && x != 0
     否则当各位为0的时候,结果错误
     */
    func isPalindrome(_ x: Int) -> Bool {
        if x < 0 || (x % 10 == 0 && x != 0) {
            return false
        }
        var x = x
        var r = 0
        while x > r {
            r = r * 10 + x % 10
            x /= 10
        }
        return x == r || x == (r / 10)
    }
    
    /*
     方法二 每次比对最高位和最低位
     */
    func isPalindrome1(_ x: Int) -> Bool {
            if x < 0 {
                return false
            }
            var div = 1
            while x / div >= 10 {
                div *= 10
            }

            var x = x
            while x > 0 {
                let left = x / div
                let right = x % 10
                if left != right {
                    return false
                }
                x = x % div / 10
                div /= 100
            }
            return true
            
        }
    
}
